import baseURL from './baseURL'; //导入接口的前缀地址

const ERROR_MESSAGE: Record<number, string> = {
    400: '请求参数错误',
    401: '未授权，请重新登录',
    403: '拒绝访问',
    404: '请求地址不存在',
    408: '请求超时',
    500: '服务器内部错误',
    501: '服务未实现',
    502: '网关错误',
    503: '服务不可用',
    504: '网关超时',
    505: 'HTTP版本不受支持'
};


type ResponseData<T> = {
    code: number,
    msg?: string,
    data: T,
    rows: T[]
};
// 定义请求方法的类型
type HttpMethod = 'GET' | 'POST';
type RequestOptions = {
    url: string,
    method?: HttpMethod,
    data?: Record<string, unknown>,
    header?: Record<string, string>  // 添加自定义header支持
}


// 定义请求成功回调结果的类型
type RequestSuccessResult<T> = WechatMiniprogram.RequestSuccessCallbackResult & {
    data: ResponseData<T>;
};

export const myRequest = <T>(options: RequestOptions) => {
    return new Promise((resolve, reject) => {
        // 开始请求 出现Loading
        // uni.showLoading({
        // 	title: '加载中...'
        // });
        console.log("我被调用了")
        wx.request({
            url: baseURL + options.url, //接口地址：前缀+方法中传入的地址
            method: options.method || 'GET', //请求方法：传入的方法或者默认是"GET"
            data: options.data || {}, //传递参数：传入的参数或者默认传递空集合 
            header: {
                'content-type': 'application/x-www-form-urlencoded',
                ...options.header  // 合并自定义headers
            },
            timeout: 10000,
            success: (res: RequestSuccessResult<T>) => {
                const statusCode = res.statusCode;

                // 处理HTTP状态码错误
                if (statusCode !== 200) {
                    const message = ERROR_MESSAGE[statusCode] || '网络服务异常';

                    wx.showToast({
                        title: message,
                        icon: 'none'
                    })
                    reject({ code: statusCode, message });
                    return;
                }
                //返回的数据（不固定，看后端接口，这里是做了一个判断，如果不为true，用uni.showToast方法提示获取数据失败)
                if (res.data.code != 0) {
                    if (res.data.code == 10000) {
                        wx.redirectTo({
                            url: '/pages/login/login'
                        })
                    }
                    if (res.data.msg) {
                        wx.showToast({
                            title: res.data.msg,
                            icon: 'none',
                        })
                    }
                }
                //getApp().globalData.error_list.push(res.data.data)
                // 请求成功关闭Loading
                //uni.hideLoading();
                // 如果不满足上述判断就输出数据
                resolve(res)
            },
            // 这里的接口请求，如果出现问题就输出接口请求失败
            fail: (err) => {
                //getApp().globalData.error_list.push(err)
                reject(err)
            }
        })
    })
}